css: Inherit device scale in _gtk_css_image_get_surface
authorAlexander Larsson <alexl@redhat.com>
Mon, 5 Aug 2013 14:11:18 +0000 (16:11 +0200)
committerAlexander Larsson <alexl@redhat.com>
Mon, 5 Aug 2013 14:14:25 +0000 (16:14 +0200)
To handle hidpi support we need to make sure we don't
downscale scaled css images.

Note: If cairo_surface_create_similar starts doing this
by itself we need to back this out.

gtk/gtkcssimage.c

index a79b3e139893a8efd2fb4045d795a5ea9dace62d..33c85f2abf55ad52e75dd51742fcb8606613a6a6 100644 (file)
@@ -389,16 +389,30 @@ _gtk_css_image_get_surface (GtkCssImage     *image,
 {
   cairo_surface_t *result;
   cairo_t *cr;
+  double sx, sy;
 
   g_return_val_if_fail (GTK_IS_CSS_IMAGE (image), NULL);
   g_return_val_if_fail (surface_width > 0, NULL);
   g_return_val_if_fail (surface_height > 0, NULL);
 
+
   if (target)
-    result = cairo_surface_create_similar (target,
-                                           CAIRO_CONTENT_COLOR_ALPHA,
-                                           surface_width,
-                                           surface_height);
+    {
+#ifdef HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE
+      cairo_surface_get_device_scale (target, &sx, &sy);
+#else
+      sx = sy = 1;
+#endif
+
+      result = cairo_surface_create_similar (target,
+                                            CAIRO_CONTENT_COLOR_ALPHA,
+                                            surface_width*sx,
+                                            surface_height*sy);
+
+#ifdef HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE
+      cairo_surface_set_device_scale (result, sx, sy);
+#endif
+    }
   else
     result = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
                                          surface_width,